package br.com.weysolucoes.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.weysolucoes.conexao.ConexaoBD;
import br.com.weysolucoes.constantes.ConstantesSQL;
import br.com.weysolucoes.dto.GrupoDefeitoDTO;


public class GrupoDefeitoDAO {

		ConstantesSQL constantesSQL = new ConstantesSQL();

		// cadastra no banco um Grupo defeito passado como parametro

		public boolean inserirGrupoDefeito(GrupoDefeitoDTO grupoDefeitoDTO) throws SQLException {
			
			ConexaoBD conexaoBD = new ConexaoBD();
			Statement st = null;
			ResultSet rs = null;

			try {

				st = conexaoBD.connection.createStatement();
				PreparedStatement preparedStatement = conexaoBD.connection.prepareStatement(constantesSQL.getSqlInsertGrupoDefeito());
				preparedStatement.setString(1, grupoDefeitoDTO.getTipoDefeito());
				preparedStatement.setString(2, grupoDefeitoDTO.getDescrNaoConform());
				preparedStatement.execute();
				return true;

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(GrupoDefeitoDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;
			}
		}

		// lista todos os grupos de defeito cadastrados no banco de dados
		public List<GrupoDefeitoDTO> listGrupoDefeito() throws SQLException{
			
			ConexaoBD conexaoBD = new ConexaoBD();
			ArrayList<GrupoDefeitoDTO> lista = new ArrayList<GrupoDefeitoDTO>();
			Statement st = null;
			ResultSet rs = null;

			try {
				st = conexaoBD.connection.createStatement();

				String sql = constantesSQL.getSqlSelectGrupoDefeito();
				rs = st.executeQuery(sql);

				while (rs.next()) {

					GrupoDefeitoDTO grupoDefeitoDTO = new GrupoDefeitoDTO();
					grupoDefeitoDTO.setCodNaoConform(rs.getInt(1));
					grupoDefeitoDTO.setTipoDefeito(rs.getString(2));
					grupoDefeitoDTO.setDescrNaoConform(rs.getString(3));
					lista.add(grupoDefeitoDTO);
				}

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(GrupoDefeitoDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
			} finally {
				try {
					if (rs != null) {
						rs.close();
					}
					if (st != null) {
						st.close();
					}
					if (conexaoBD.connection != null) {
						conexaoBD.connection.close();
					}
				} catch (SQLException ex) {
					Logger lgr = Logger.getLogger(GrupoDefeitoDAO.class.getName());
					lgr.log(Level.WARNING, ex.getMessage(), ex);
				}

			}

			return lista;
		}
		
		// Remove o refrigerador cadastrado no banco de dados
		public boolean deletarGrupoDefeito(GrupoDefeitoDTO grupoDefeitoDTO) throws SQLException {

			ConexaoBD conexaoBD = new ConexaoBD();

			Statement st = null;
			ResultSet rs = null;

			try {

				st = conexaoBD.connection.createStatement();
				PreparedStatement preparedStatement = conexaoBD.connection
						.prepareStatement(ConstantesSQL.getSqlDeleteGrupoDefeito());
				preparedStatement.setInt(1, grupoDefeitoDTO.getCodNaoConform());
				preparedStatement.executeUpdate();
				return true;

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(GrupoDefeitoDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;
			}
		}

		// Editar Grupos de Defeito cadastrados no banco de dados
		public boolean editarGrupoDefeito(GrupoDefeitoDTO grupoDefeitoDTO) throws SQLException {

			ConexaoBD conexaoBD = new ConexaoBD();
			Statement st = null;
			ResultSet rs = null;

			try {

				st = conexaoBD.connection.createStatement();

				PreparedStatement preparedStatement = conexaoBD.connection
						.prepareStatement(ConstantesSQL.getSqlUpdateGrupoDefeito());
				preparedStatement.setString(1, grupoDefeitoDTO.getTipoDefeito());
				preparedStatement.setString(2, grupoDefeitoDTO.getDescrNaoConform());
				preparedStatement.setInt(3, grupoDefeitoDTO.getCodNaoConform());
				preparedStatement.executeUpdate();
				return true;

			} catch (SQLException ex) {
				Logger lgr = Logger.getLogger(GrupoDefeitoDAO.class.getName());
				lgr.log(Level.SEVERE, ex.getMessage(), ex);
				return false;

			}
		}
}
